home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / msdos / raytrace / pov / patches / pvmpovra.txt < prev    next >
Text File  |  1994-10-02  |  9KB  |  219 lines

  1.  
  2.  - PVM'd POV-Ray -                    Brad Kline, May 11 1994
  3.  
  4. ***** NOTE - This is an UNOFFICIAL modification to POV-Ray 2.2. *****
  5.  
  6. ** DO NOT SEND PROBLEM REPORTS TO THE POV TEAM REGARDING THESE MODIFICATIONS. **
  7.  
  8. The author disclaims all warranties with regard to this software, including 
  9. all implied warranties of merchant-ability and fitness.  The code is simply 
  10. distributed as it is. 
  11.  
  12. I only ask that credit (or blame) is attributed to me for the original work.
  13.  
  14. These files and modifications to POV-Ray 2.2 give POV the ability to distribute
  15. a rendering across multiple heterogeneous machines.  The implementation vehicle
  16. is the Parallel Virtual Machine (PVM) System 3.2.  PVM was developed by a team
  17. of people from the University of Tennesee, Oak Ridge National Laboratory, and
  18. Emory University. The effort was funded in part by the U.S. Department of 
  19. Energy, the  National Science Foundation and the State of Tennessee.  The PVM 
  20. source is not a part of this modification.  You may get PVM 3.2 by sending
  21. E-mail to the NETLIB daemon "netlib@ornl.gov" with a subject line of
  22. "send index for PVM3" (NO quotes).  This will reply with information about
  23. specific PVM 3.2 documentation and source file access.
  24.  
  25. Theory of Operation
  26. -------------------
  27. Using the PVM model, there is one master and many slave tasks.  The master has 
  28. the responsibility of issuing the work sections to the slaves, and receiving 
  29. the rendered line segments back. It does not render any lines by itself.  When 
  30. a line segment is returned, the master writes it to the appropriate position 
  31. in the output file.  The PVM component is only activated if the user specifies 
  32. the "-NMxx" option on the POV command line, where "xx" is the number of slaves 
  33. to use.  Absence of this option will have the same effect as using the original 
  34. POV-Ray program.  In other words, there will be only one task doing all the 
  35. rendering.
  36.  
  37. When the -NMxx option is specified, the program sub-divides the rendering into
  38. a number of grid sections.  The width and depth of the sections are defaulted
  39. to 80 columns by 10 rows.  These values may be modified by the -NWxx and the 
  40. -NDxx options, respectively.  It is important to note that by varying the grid 
  41. sections in width and in depth, you can affect the performance of the rendering.
  42. If you have particular renderings that are very complex in a small portion of 
  43. the display, then a finer grain may help.  In this way, more of the tasks are 
  44. able to migrate towards the grid sections that are more complex. You must also 
  45. consider overhead if using anti-aliasing.  Anti-aliasing requires the line 
  46. segment above and below the grid section to be traced so that super-sampling 
  47. may occur.  If the depth of the grid is reduced in size, and anti-aliasing is 
  48. turned on, your percentage of overhead goes up.  For example, setting a depth 
  49. of two (-ND2) using anti-aliasing would have an overhead of 50 percent.  It is 
  50. possible that reducing the column first would be a better way of testing the 
  51. distribution scheme. 
  52.  
  53. For example, if I wanted to distribute an 800x600 rendering and use eight PVM 
  54. tasks to do the work, I would use the -NM8 option, and let the PVM master 
  55. define 600 80x10 sections.  Eight slave tasks would be launched, and when ready,
  56. they would request work to do from the master.  The master then issues a column
  57. and row range back to the requesting slave.  As each line segment is completed,
  58. then the slave sends it back to the master, who writes the segment to disk.  
  59. If all slaves did perfectly equal work in this example, they would have been 
  60. issued 75 sections of work, and would have returned 750 line segments each.
  61.  
  62. Note that the work issues are done one at a time.  In this way, effective load
  63. balancing can occur.  Tasks rendering the "easy" sections will eventually all 
  64. migrate towards the harder sections.  Seriously imbalanced distributions will
  65. be seen by widely varying percentages shown at the end of the rendering.  The 
  66. more evenly the tasks are distributed, the better the load balance.
  67.  
  68.  
  69. Additional Options to POV-Ray 2.2:
  70. ----------------------------------
  71. -NMxx        - Use xx number of slave tasks.
  72. -NAxxxx        - Only run on architecture type xxxx (See PVM documents).
  73. -NDxx        - Set PVM distribution grid depth to xx.
  74. -NWxx        - Set PVM distribution grid width to xx.
  75.  
  76.  
  77. Known restrictions / bugs:
  78. --------------------------
  79. - Statistics are not send back to the master.
  80. - Restarting a partial rendering will not work.
  81.  
  82.  
  83. Installing and building PVM'd POV-Ray:
  84. --------------------------------------
  85. Unload the TAR package into a your POV-Ray source directory.
  86.  
  87. Example:
  88.  
  89. % cd povray2/source
  90.  
  91. % zcat PVMPOV.TAR | tar xf -
  92.  
  93.  
  94. Configuration
  95. -------------
  96. There is a getcwd() call in pvm.c.  If your system uses getwd() instead, 
  97. modify the GETCWD define in pvm.h.
  98.  
  99. Files in this package:
  100. ----------------------
  101. pvm.h        - Include file for PVM related files. 
  102.  
  103. pvm.c        - The main routines that manage the PVM tasks.  This file 
  104.           references "pvm3.h", which is a part of the PVM package.
  105.  
  106. pvm.mak        - A modified UNIX.MAK makefile that includes these new files
  107.           and references the PVM library -> libpvm3.a.  You must get
  108.           libpvm3.a from the PVM team noted above.  Also, I have it
  109.           set up to use xwindows.c.  You may need to change that to
  110.           the generic unix.c file.  Since the POV-Ray make file was
  111.           declared public domain, I simply released the file in total.
  112.  
  113. difflist.txt    - A complete diff of the affected files in the original 
  114.           POV-Ray source. (original = "<" and new = ">").
  115.  
  116. ediff.frame    - A "diff -e" of frame.h.  See below on how to update the origi-
  117.           nal file using ed(1).
  118.  
  119. ediff.povray    - A "diff -e" of povray.c.
  120.  
  121. ediff.render    - A "diff -e" of render.c.
  122.  
  123. By using "ed", you may update the original source file to the modified file as 
  124. in the following example.
  125.  
  126. *** NOTE - Be sure to back up the original files before doing this!! ***
  127.  
  128. % ed -s frame.h < ediff.frame
  129. % ed -s povray.c < ediff.povray
  130. % ed -s render.c < ediff.render
  131.  
  132. To build the product, you may have to modify pvm.mak to suit your local file
  133. and directory structure.  Be sure you have PVM installed, and have access
  134. to pvm3.h and libpvm3.a.
  135.  
  136. The pvm.mak file builds an a.out called "pvmpovray".  This was done so that
  137. there is a distinction between this and the original POV-ray a.out.
  138.  
  139. Execution example:
  140. ------------------
  141. You first must have a PVM daemon launched on each machine that will be 
  142. participating in the rendering.  Refer to the PVM 3.2 documentation.  The 
  143. following is an example I use to start PVM on a group of sixteen SOLARIS based
  144. SPARCstation-5's.  My home directory is auto-mounted to all of these hosts, so 
  145. I reference the same directory in all cases.  I also keep pvmpovray installed
  146. in a directory called "bin", relative to my home directory.
  147.  
  148.  
  149. % cat pvm.hosts
  150. sun501 dx=./bin/pvmd3 ep=./bin
  151. sun502 dx=./bin/pvmd3 ep=./bin
  152. sun503 dx=./bin/pvmd3 ep=./bin
  153. sun504 dx=./bin/pvmd3 ep=./bin
  154. sun505 dx=./bin/pvmd3 ep=./bin
  155. sun506 dx=./bin/pvmd3 ep=./bin
  156. sun507 dx=./bin/pvmd3 ep=./bin
  157. sun508 dx=./bin/pvmd3 ep=./bin
  158. sun509 dx=./bin/pvmd3 ep=./bin
  159. sun510 dx=./bin/pvmd3 ep=./bin
  160. sun511 dx=./bin/pvmd3 ep=./bin
  161. sun512 dx=./bin/pvmd3 ep=./bin
  162. sun513 dx=./bin/pvmd3 ep=./bin
  163. sun514 dx=./bin/pvmd3 ep=./bin
  164. sun515 dx=./bin/pvmd3 ep=./bin
  165. sun516 dx=./bin/pvmd3 ep=./bin
  166.  
  167.  
  168. The following command launches the PVM daemons.
  169.  
  170. % /pvmd3 pvm.hosts
  171.  
  172. Now that the PVM daemons are up and waiting for work to do, we can render.
  173.  
  174. % pvmpovray bnch.def -Iskyvase.pov -Oskyvase.tga -NM16
  175.  
  176.   Persistence of Vision Raytracer Ver 2.2.u
  177.     This is an unofficial version compiled by:
  178.      Brad Kline - PVM Version .................
  179.      The POV-Ray Team is not responsible for supporting this version.
  180.   Copyright 1993 POV-Team
  181.   ----------------------------------------------------------------------
  182.   POV-Ray is based on DKBTrace 2.12 by David K. Buck & Aaron A. Collins.
  183.     Contributing Authors: (Alphabetically)
  184.        Steve Anger        Steve A. Bennett   David K. Buck
  185.        Aaron A. Collins   Alexander Enzmann  Dan Farmer
  186.        Douglas Muir       Bill Pulver        Robert Skinner
  187.        Scott Taylor       Drew Wells         Chris Young
  188.     Other contributors listed in the documentation.
  189.   ----------------------------------------------------------------------
  190.  
  191. POV-Ray Options in effect: +v1 +ft +mb25 +nm16 +nw80 +nd10 +a0.300 +j1.000 +r3 -q9 -w640 -h480 -s1 -e480
  192. -k0.000 -mv2.0 -iskyvase.pov -oskyvase.tga -l./include 
  193. Parsing..........
  194. Preprocessing...
  195. POV-Ray rendering skyvase.pov to skyvase.tga :
  196. PVM Task Distribution: Tasks-16  Grid width-80  Grid Depth-10  Sections-384
  197.  
  198. Res  640 X  480.   480 of  480 lines completed.
  199.  
  200. PVM Task Distribution Statistics:
  201. Task[  0]   6.25%  Task[  1]   7.55%  Task[  2]   6.25%  Task[  3]   5.73%  
  202. Task[  4]   5.99%  Task[  5]   6.77%  Task[  6]   6.25%  Task[  7]   6.25%  
  203. Task[  8]   6.51%  Task[  9]   6.25%  Task[ 10]   7.03%  Task[ 11]   4.95%  
  204. Task[ 12]   5.99%  Task[ 13]   6.51%  Task[ 14]   5.99%  Task[ 15]   5.73%  
  205.  
  206.   Time For Trace:    0 hours  0 minutes 37.00 seconds
  207.  
  208. %
  209.  
  210.  
  211. ------
  212.  
  213. Enjoy!
  214.  
  215. Brad Kline
  216. jbk@cray.com
  217.  
  218.  
  219.